Sự Liên thông giữa các trình khách Giao thức và kiến trúc của Hệ thống X Window

Giao thức trung tâm của X Window (The X Window core protocol) cung cấp một cơ chế cho phép các trình khách giao thông với nhau bằng cách sử dụng các sở hữu của cửa sổ (window properties) và bằng các sự kiện (events), cụ thể là các sự kiện thông điệp giữa trình khách-tới-trình khách. Tuy vậy nhưng nó lại không đặc tả một giao thức cụ thể nào cho sự tương tác ấy. Các giao thức này lại do một loạt các quy ước giao thông liên trình khách riêng biệt chi phối.

Bản Hướng dẫn về quy ước giao thông liên trình khách (Inter-Client Communication Conventions Manual) đặc tả giao thức dùng để trao đổi dữ liệu thông qua sự lựa chọn và tương tác của các trình ứng dụng với chương trình quản lý cửa sổ. Bản đặc tả này đã từng được cân nhắc là một bản đặc tả khó thực hiện và rối ren. Sự nhất quán trong diện mạo và cử chỉ (look and feel) của trình ứng dụng, cũng như trong giao thông thường được giải quyết bằng cách tiến hành lập trình cho một môi trường mặt bàn cụ thể nào đấy mà thôi.

Giao thức trao đổi liên trình khách (Inter-Client Exchange protocol - viết tắt là ICE) đặc tả một cơ cấu tổ chức để xây dựng các giao thức về sự tương tác giữa các trình khách, hầu cho một giao thức cụ thể nào đấy có thể lấy nó làm nền tảng để xây dựng nên một giao thức mới. Trên thực tế, giao thức quản lý phiên giao dịch của X (X Session Management protocol - viết tắt là XSMP) là một giao thức dựa trên ICE. Giao thức này là giao thức chỉ thị sự tương tác giữa các trình ứng dụng, là những trình ứng dụng có phần quản lý phiên giao dịch (Session management), một phần mềm quản lý việc lưu trữ tình trạng làm việc của mặt bàn đồ họa ở các đầu tương tác trong phiên giao dịch, khôi phục lại mặt bàn đồ họa khi một phiên giao dịch của cùng một người dùng bắt đầu trở lại.

Những quy ước mới được ghi trong các bản đặc tả của freedesktop, bao gồm quy ước về "kéo-và-thả" (drag-and-drop) mà Xdnd (Drag-and-Drop protocol for the X window system) sử dụng để truyền tải dữ liệu. Xdnd cho phép việc truyền tải dữ liệu bằng cách lựa chọn chúng trong một cửa sổ rồi kéo chúng sang một cửa sổ khác. Bên cạnh đó chúng ta còn có quy ước nhúng chương trình ứng dụng (embedded application convention) Xembed là bản quy ước liệt kê chi tiết phương pháp cho phép một trình ứng dụng chạy trên cửa sổ con của một trình ứng dụng khác.

Bộ đệm dùng cho việc chọn, cắt, cùng với tính năng "kéo-và-thả"

Bộ đệm (buffer) dùng để lưu trữ những phần dữ liệu được lựa chọn, những phần dữ liệu được cắt ra, cùng với tính năng "kéo-và-thả" (drag-and-drop) là những cơ chế sử dụng trong Hệ thống X Window cho phép người dùng truyền tải dữ liệu từ cửa sổ này sang cửa sổ khác. Bộ đệm lưu trữ những phần chọn lựa (selections), những phần được cắt ra (cut), đại đa số được dùng khi người dùng lựa chọn một đoạn văn bản (text), hay một những dữ liệu khác, trong một cửa sổ và dán (paste) nó vào một cửa sổ khác. Tính năng "kéo-và-thả" được dùng khi người dùng lựa chọn cái gì đó trong một cửa sổ, bấm xuống phần lựa chọn và kéo nó sang một cửa sổ khác.

Trong khi hai cửa sổ có thể do hai chương trình ứng dụng khác nhau xử lý, truyền tải dữ liệu giữa chúng đòi hỏi phải có hai trình khách khác nhau thông nối với cùng một trình chủ X để chúng có thể tương tác. Giao thức trung tâm của X Window có bao gồm một số loại yêu cầu (requests) và sự kiện (events) dành riêng cho việc trao đổi những dữ liệu đã được lựa chọn (selection exchange), song phần lớn việc truyền tải dữ liệu được giải quyết bằng cách dùng phương thức gửi sự kiện trình khách-tới-trình khách chung (general client-to-client event sending) cùng với các sở hữu của cửa sổ (window properties). Những sở hữu này không chỉ được dùng nguyên cho việc truyền tải dữ liệu đã được lựa chọn không mà thôi.

Dữ liệu được truyền tải giữa các trình khách có thể có kiểu dữ liệu khác nhau: thường thì chúng chỉ là văn bản, song chúng còn có thể là đồ họa pixmap (hay đồ họa bitmap), một con số, một danh sách các đối tượng (objects) v.v.

Sự lựa chọn dữ liệu cùng với tính năng "kéo-và-thả" là những cơ chế năng động (active mechanism): sau khi một vài đoạn văn bản được lựa chọn trong một cửa sổ nào đó, trình khách xử lý cửa sổ phải năng động trong việc hỗ trợ một giao thức, cho phép việc truyền tải dữ liệu tới một trình ứng dụng đòi hỏi dữ liệu ấy, xảy ra. Ngược lại, bộ đệm (buffer) lưu trữ dữ liệu được cắt ra là một cơ chế bị động (passive mechanism): khi người dùng chọn một đoạn văn bản, nội dung của đoạn văn bản được cắt rời ra và được chuyển vào bộ đệm lưu trữ dữ liệu cắt. Dữ liệu đã cắt và lưu trữ được giữ nguyên trong bộ đệm ngay cả khi trình ứng dụng xử lý cửa sổ ấy kết thúc và cửa sổ bị xóa đi.

Chương trình quản lý cửa sổ

Chương trình quản lý cửa sổ là một trình ứng dụng điều khiển diện mạo của cửa sổ, và những phần tử đồ họa khác, trong một môi trường giao diện đồ họa người dùng. Nguyên nhân gây ra sự khác nhau về diện mạo của các hệ thống X Window trong các cài đặt khác nhau là do người ta dùng những chương trình quản lý cửa sổ khác nhau, hoặc do sự khác nhau trong cấu hình của chương trình quản lý cửa sổ được dùng mà ra.

Chương trình quản lý cửa sổ quyết định vị trí tọa độ của các cửa sổ, cho chúng một bộ viền trang trí ở quanh mép, xử lý các hình biểu trưng (icons), xử lý chuỗi bấm của chuột ở bên ngoài cửa sổ (như bấm chuột trên nền đằng sau), xử lý chuỗi bấm của bàn phím (chẳng hạn, thu nhỏ cửa sổ lại thành hình biểu trưng (iconify) khi tổ hợp phím ALT-F4 được bấm) v.v.

Tập tin:Wm-dopo.pngX Window, không có chương trình quản lý cửa sổ, không có khung trang trí (decorative frames), không có hình biểu trưng (icons), và cũng không có trình đơn bật lên (popup menus) trên cửa sổ gốc (root window).

Đứng trên phương diện của trình chủ X, chương trình quản lý cửa sổ không khác gì các trình khách khác. Chương trình quản lý cửa sổ quản lý vị trí tọa độ khởi đầu cùng với những khung trang trí chung quanh của các cửa sổ, thông qua những yêu cầu sau đây:

  1. Một trình ứng dụng có thể yêu cầu trình chủ dừng lại, không thi hành các yêu cầu để bài trí (hiển thị) các cửa sổ con của một cửa sổ mẹ nào đấy, song gửi một sự kiện thay thế;
  2. Một trình ứng dụng có thể yêu cầu thay nhánh mẹ của một cửa sổ.

Chương trình quản lý cửa sổ dùng yêu cầu đầu tiên để chặn các yêu cầu bài trí các cửa sổ ở tầng trên cùng (top-level windows) (những cửa sổ con của cửa sổ gốc). Bất cứ lúc nào một chương trình ứng dụng đòi hỏi sự bài trí của một cửa sổ ở tầng trên cùng, trình khách cũng sẽ không xử lý yêu cầu, thay vào đó, nó gửi một sự kiện cho chương trình quản lý cửa sổ. Hầu hết các chương trình quản lý cửa sổ thay nhánh mẹ của cửa sổ: chúng tạo nên một cửa sổ ở tầng trên cùng to hơn (gọi là cửa sổ khung (frame window)), rồi thay nhánh mẹ của cửa sổ vốn có một thành cửa sổ con của nó. Trong phương diện đồ họa mà nói, việc làm này tương đương với việc đặt cửa sổ vốn có vào bên trong một cửa sổ khung. Khoảng không gian của cửa sổ khung không bị cửa sổ này chiếm chỗ, sẽ là chỗ để dành cho cái khung trang trí ở chung quanh cửa sổ như "đường viền" và "thanh tiêu đề" (the "border" and the "title bar").

Chương trình quản lý cửa sổ quản lý các chuỗi bấm của chuột trong cửa sổ khung. Nó xử lý những việc như dịch chuyển vị trí hay thay đổi cỡ của cửa sổ, khi người dùng bấm vào đường viền hay vào thanh tiêu đề và kéo.

Chương trình quản lý cửa sổ quản lý còn có trách nhiệm xử lý những hình biểu trưng, và những phần tử đồ họa liên quan trong giao diện đồ họa người dùng. Những hình biểu trưng không tồn tại ở tầng giao thức trung tâm của X Window (X Window core protocol). Chúng được thực hiện bởi chương trình quản lý cửa sổ. Chẳng hạn, khi một cửa sổ phải biểu trưng hóa (iconified) - cửa sổ bị thu nhỏ và chỉ được đại diện bằng một hình biểu trưng nhỏ - chương trình quản lý cửa sổ FVWM xóa cửa sổ đó đi, làm cho nó vô hình, rồi tạo nên một cửa sổ con làm tên của hình biểu trưng, và có thể một cửa sổ con nữa làm hình biểu trưng cho cửa sổ bị thu nhỏ. Vì vậy, ý nghĩa và phương pháp xử lý các hình biểu trưng hoàn toàn thuộc về trách nhiệm của chương trình quản lý cửa sổ: một số chương trình quản lý cửa sổ, như wm2, hoàn toàn không hỗ trợ và thực thi hình biểu trưng một tí nào hết.

Phần mềm quản lý phiên giao dịch

Tại một thời điểm nhất định nào đó, tình trạng của một phiên giao dịch cũng hầu như tương tự với "tình trạng của mặt bàn" (state of the desktop), tức là nó bao gồm một số cửa sổ, và nội dung của những cửa sổ này. Chính xác hơn nữa, nó chính là tình trạng của những chương trình ứng dụng đang vận hành và xử lý những cửa sổ này, cùng với những thông số và dữ liệu cho phép chương trình ứng dụng khôi phục lại điều kiện hoạt động của những cửa sổ mà nó đang quản lý, nếu cần thiết. Quản lý phiên giao dịch là một chương trình ứng dụng dùng để lưu trữ và khôi phục lại tình trạng hoạt động của một phiên giao dịch.

Ảnh hưởng rõ nhất của việc dùng phần mềm quản lý phiên giao dịch là chúng ta có thể đăng xuất một phiên giao dịch tương tác, chấm dứt nó, song khi đăng nhập trở lại, tình trạng của các cửa sổ được khôi phục lại giống y nguyên như lúc trước khi chúng ta đăng xuất. Để có thể làm được như vậy, phần mềm quản lý phiên giao dịch lưu trữ tên của các chương trình ứng dụng đang chạy khi chúng ta đăng xuất, và khởi động chúng lại khi chúng ta đăng nhập. Nếu chúng ta muốn khôi phục lại tình trạng hoạt động của các trình ứng dụng (hòng khôi phục lại nội dung của các cửa sổ mà trình ứng dụng đã dùng), thì các chương trình ứng dụng phải có khả năng lưu trữ tình trạng hoạt động của nó khi phần mềm quản lý phiên giao dịch yêu cầu, và nhập các dữ liệu đã lưu trữ trở lại trong bộ nhớ, khôi phục lại điều kiện và tình trạng hoạt động của mình như trước đây, khi chương trình ứng dụng hoạt động trở lại.

Hệ thống X Window có kèm một phần mềm quản lý phiên giao dịch mặc định, gọi là xsm. Có nhiều phần mềm quản lý phiên giao dịch khác được phát triển cho một số hệ thống mặt bàn đặc thù, ví dụ ksmserver là phần mềm quản lý phiên giao dịch mặc định của KDE.